#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

//int g_val_i;
//int g_val_b = 100;

int g_val = 100;

int main()
{
	pid_t id = fork();
	int cnt = 5;

	if(id == 0)
	{
		while(1)
		{
			printf("i am child, mypid: %d, ppid: %d, g_val: %d, &g_val: %p\n",getpid(),getppid(),g_val,&g_val);
			sleep(1);
			if(cnt) cnt--;
			else
			{
				g_val = 200;
				printf("子进程 change 100->200\n");
				cnt--;
			}
		}
	}
	else
	{	
		while(1)
		{
			printf("i am parent, mypid: %d, ppid: %d, g_val: %d, &g_val: %p\n",getpid(),getppid(),g_val,&g_val);
			sleep(1);
		}
	}


//	printf("code addr: %p\n", main);
//	const char* str = "hello";
//	printf("read only string addr: %p\n", str);
//	printf("init global addr: %p\n", &g_val_b);
//	printf("uninit global addr: %p\n", &g_val_i);
//	char* mem = (char*)malloc(100);
//	char* mem1 = (char*)malloc(100);
//	char* mem2 = (char*)malloc(100);
//	printf("heap addr: %p\n",mem);
//	printf("heap1 addr: %p\n",mem1);
//	printf("heap2 addr: %p\n",mem2);
//	printf("stack addr: %p\n", &str);
//	printf("\n");
//
//	int a;
//	int b;
//	int c;
//	int d;
//	int e;
//	printf("stack addr: %p\n",&a);
//	printf("stack addr: %p\n",&b);
//	printf("stack addr: %p\n",&c);
//	printf("stack addr: %p\n",&d);
//	printf("stack addr: %p\n",&e);
	return 0;
}
